#include <iostream>
#include <string>
#include <vector>
#include <sys/types.h>
#include <dirent.h>
#include "Super.h"

using namespace std;

int main(int argc, char *argv[]){
    string fileName,
           path;
    vector < string > archIN;
    DIR * directorio;
    
    /*Estructura dirent:
    ino_t  d_ino     Numero de Archivo (Es una estructura que contiene 
                                        mas datos acerca del archivo).
    char * d_name    Nombre de la entrada o archivo.*/
    
    struct dirent * entradaDir;

    
    if( argc == 2 ){
        
        path = argv[1];
        
        if( path[ path.size() - 1 ] != '\\' && 
            path[ path.size() - 1 ] != '/' ) path += "/";
        
        //Se abre el directorio que se paso por argumento.
        directorio = opendir ( path.c_str() );
        
        if (directorio != NULL){
            /*Se lee el directorio, cada lectura con readdir()
            devuelve el nombre de algun archivo o fichero contenido
            dentro de este. Similar a tener un archivo de texto con un
            nombre de archivo por linea.
            
            Sugerencia de doble parentesis del compilador G++*/
            while ( ( entradaDir = readdir ( directorio ) ) ){
                string cmp;
                
                //Se toma de la estructura el nombre del archivo.
                fileName = entradaDir->d_name;
                
                if( fileName.size() > 2 ){
                    
                    cmp = fileName.substr( fileName.size() - 3 );
                
                    if( ! cmp.compare(".in") ){ 
                        archIN.push_back( path );
                        archIN[ archIN.size() - 1 ] += fileName;
                    }
                
                }
                
            }
            
            closedir (directorio);
            
        }else{
            cout << path << ": No se pudo abrir el directorio.\n";
            return -1;
        }
                
        for( unsigned int i = 0 ; i < archIN.size() ; i++ ){
            Super sim ( archIN[i].c_str() );
        
            cout << endl << "Archivo: " << archIN[i] << endl;
        
            sim.correrSimulacion();
        
            cout << "Tiempo Promedio de Ocio: " 
                 << sim.getTiempoDeOcioTotal() << endl;
        
            cout << "Tiempo Promedio de Espera: " 
                 << sim.getTiempoDeEsperaPromedioTotal() << endl << endl;
            
            system("PAUSE");
        }
        
    }else{
        cout << "Super.exe:\n"
             << "Programa de simulacion de sistema de cajas de supermercado.\n"
             << "Desarrollado por Grupo 1 | Cursada: JM | 2009\n\n"
             << "USO:\n"
             << "Super.exe Directorio_Archivos_IN\n\n"
             << "Ejemplo de uso:\n"
             << "Super.exe IN/\n";
            
        return 0;
    }
    
    return 0;

}
